/*
 *  Copyright (C) 2009 Antonio Mata Chamorro
 *  
 *  Este programa es software libre: usted puede redistribuirlo y/o modificarlo
 *  bajo los t�rminos de la Licencia P�blica General GNU publicada
 *  por la Fundaci�n para el Software Libre, ya sea la versi�n 3
 *  de la Licencia, o (a su elecci�n) cualquier versi�n posterior.
 *  
 *  Este programa se distribuye con la esperanza de que sea �til, pero 
 *  SIN GARANT�A ALGUNA; ni siquiera la garant�a impl�cita
 *  MERCANTIL o de APTITUD PARA UN PROP�SITO DETERMINADO. 
 *  Consulte los detalles de la Licencia P�blica General GNU para obtener 
 *  una informaci�n m�s detallada. 
 *  
 *  Deber�a haber recibido una copia de la Licencia P�blica General GNU
 *  junto a este programa. 
 *  En caso contrario, consulte <http://www.gnu.org/licenses/>.
 *   
 */
package org.javahispano.javacup.tacticas_aceptadas.amata.com.amata.javacup.tacticas.alineacion;

import org.javahispano.javacup.modelo.Posicion;

import org.javahispano.javacup.tacticas_aceptadas.amata.com.amata.javacup.tacticas.SoccerMatchConfiguration;
import org.javahispano.javacup.tacticas_aceptadas.amata.com.amata.javacup.tacticas.TacticaTierAI;

/**
 * Contiene un lista de posibles alineaciones para la tactica
 * {@link TacticaTierAI}. Las alineaciones estan agrupadas de 3 en 3. La primera
 * es una posicion de saque, la segunda es una posicion de recepcion y la
 * tercera una posicion de ataque. Cada grupo se puede seleccionar con un indice
 * que se puede fijar con el par�metro
 * {@link SoccerMatchConfiguration#getIndexAlineacion()}
 * 
 * @author Antonio Mata Chamorro
 * */
public class AlineacionTierAI {
	Posicion alineacion1[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-11.412587412587413, -20.90497737556561),
			new Posicion(10.937062937062937, -21.142533936651585),
			new Posicion(25.916083916083913, -21.855203619909503),
			new Posicion(-25.44055944055944, -21.855203619909503),
			new Posicion(-12.125874125874127, 5.226244343891403),
			new Posicion(11.65034965034965, 5.226244343891403),
			new Posicion(28.531468531468533, 4.98868778280543),
			new Posicion(-27.104895104895103, 5.463800904977376),
			new Posicion(-9.272727272727272, 34.44570135746606),
			new Posicion(9.272727272727272, 35.15837104072398) };

	Posicion alineacion2[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-8.321678321678322, -21.142533936651585),
			new Posicion(10.223776223776223, -21.380090497737555),
			new Posicion(22.58741258741259, -21.61764705882353),
			new Posicion(-22.825174825174827, -21.61764705882353),
			new Posicion(-10.223776223776223, 4.98868778280543),
			new Posicion(10.6993006993007, 4.513574660633484),
			new Posicion(27.58041958041958, 19.2420814479638),
			new Posicion(-28.055944055944057, 19.004524886877828),
			new Posicion(-9.748251748251748, 31.357466063348415),
			new Posicion(9.510489510489512, 31.357466063348415) };

	Posicion alineacion3[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-8.083916083916083, -21.380090497737555),
			new Posicion(9.510489510489512, -21.142533936651585),
			new Posicion(21.636363636363637, -21.855203619909503),
			new Posicion(-22.58741258741259, -21.380090497737555),
			new Posicion(-0.23776223776223776, -4.751131221719457),
			new Posicion(-0.23776223776223776, 15.441176470588236),
			new Posicion(10.6993006993007, 5.9389140271493215),
			new Posicion(-11.412587412587413, 5.701357466063349),
			new Posicion(-9.748251748251748, 31.357466063348415),
			new Posicion(9.510489510489512, 31.357466063348415) };

	Posicion alineacion4[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-9.034965034965035, -22.092760180995477),
			new Posicion(10.461538461538462, -20.90497737556561),
			new Posicion(23.062937062937063, -21.380090497737555),
			new Posicion(-23.776223776223777, -22.092760180995477),
			new Posicion(-0.23776223776223776, 6.651583710407239),
			new Posicion(-15.93006993006993, 5.701357466063349),
			new Posicion(14.265734265734267, 5.9389140271493215),
			new Posicion(-16.167832167832167, 33.970588235294116),
			new Posicion(14.027972027972028, 34.44570135746606),
			new Posicion(0.0, 34.68325791855204) };

	Posicion alineacion5[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-9.034965034965035, -21.61764705882353),
			new Posicion(9.272727272727272, -21.380090497737555),
			new Posicion(21.636363636363637, -20.90497737556561),
			new Posicion(-23.062937062937063, -22.092760180995477),
			new Posicion(-0.23776223776223776, 5.226244343891403),
			new Posicion(-16.167832167832167, 4.98868778280543),
			new Posicion(14.503496503496503, 5.701357466063349),
			new Posicion(-28.293706293706293, 22.092760180995477),
			new Posicion(25.202797202797203, 22.330316742081447),
			new Posicion(0.0, 34.68325791855204) };

	Posicion alineacion6[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-21.16083916083916, -21.61764705882353),
			new Posicion(0.4755244755244755, -21.61764705882353),
			new Posicion(20.20979020979021, -21.61764705882353),
			new Posicion(-29.72027972027972, -9.027149321266968),
			new Posicion(26.867132867132867, -8.076923076923077),
			new Posicion(-0.23776223776223776, 11.877828054298643),
			new Posicion(14.027972027972028, 11.64027149321267),
			new Posicion(-14.503496503496503, 11.877828054298643),
			new Posicion(9.034965034965035, 34.68325791855204),
			new Posicion(-7.846153846153847, 34.20814479638009) };

	Posicion alineacion7[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-21.874125874125873, -22.330316742081447),
			new Posicion(0.4755244755244755, -21.380090497737555),
			new Posicion(20.20979020979021, -22.092760180995477),
			new Posicion(-29.244755244755243, -12.115384615384617),
			new Posicion(26.867132867132867, -10.690045248868778),
			new Posicion(-0.7132867132867133, -2.3755656108597285),
			new Posicion(11.412587412587413, 8.076923076923077),
			new Posicion(-11.65034965034965, 8.314479638009049),
			new Posicion(0.0, 18.29185520361991),
			new Posicion(0.23776223776223776, 31.357466063348415) };

	Posicion alineacion8[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-21.3986013986014, -21.61764705882353),
			new Posicion(0.7132867132867133, -21.142533936651585),
			new Posicion(20.685314685314687, -21.142533936651585),
			new Posicion(-11.174825174825173, 8.314479638009049),
			new Posicion(10.6993006993007, 8.552036199095022),
			new Posicion(-29.95804195804196, 8.076923076923077),
			new Posicion(27.58041958041958, 8.314479638009049),
			new Posicion(-19.020979020979023, 33.257918552036195),
			new Posicion(19.496503496503497, 32.782805429864254),
			new Posicion(0.23776223776223776, 31.357466063348415) };

	Posicion alineacion9[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-10.937062937062937, -41.80995475113122),
			new Posicion(10.223776223776223, -41.334841628959275),
			new Posicion(25.678321678321677, -42.047511312217196),
			new Posicion(-23.538461538461537, -41.334841628959275),
			new Posicion(-10.937062937062937, -21.142533936651585),
			new Posicion(7.846153846153847, -21.380090497737555),
			new Posicion(28.293706293706293, -21.855203619909503),
			new Posicion(-27.81818181818182, -21.142533936651585),
			new Posicion(-8.321678321678322, -7.364253393665159),
			new Posicion(8.321678321678322, -6.889140271493213) };

	Posicion alineacion10[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-8.321678321678322, -41.57239819004525),
			new Posicion(8.797202797202797, -42.047511312217196),
			new Posicion(24.727272727272727, -41.0972850678733),
			new Posicion(-24.727272727272727, -42.047511312217196),
			new Posicion(-9.034965034965035, -22.330316742081447),
			new Posicion(8.797202797202797, -21.61764705882353),
			new Posicion(26.867132867132867, -14.96606334841629),
			new Posicion(-28.293706293706293, -14.96606334841629),
			new Posicion(-9.034965034965035, -4.98868778280543),
			new Posicion(9.986013986013985, -4.98868778280543) };

	Posicion alineacion11[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-8.083916083916083, -42.047511312217196),
			new Posicion(8.321678321678322, -41.334841628959275),
			new Posicion(24.013986013986013, -41.80995475113122),
			new Posicion(-23.776223776223777, -42.28506787330317),
			new Posicion(0.23776223776223776, -34.20814479638009),
			new Posicion(1.188811188811189, -18.054298642533936),
			new Posicion(9.748251748251748, -24.230769230769234),
			new Posicion(-10.223776223776223, -24.230769230769234),
			new Posicion(-9.034965034965035, -4.98868778280543),
			new Posicion(8.797202797202797, -5.463800904977376) };

	Posicion alineacion12[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-8.321678321678322, -41.334841628959275),
			new Posicion(9.748251748251748, -41.80995475113122),
			new Posicion(24.48951048951049, -41.334841628959275),
			new Posicion(-23.776223776223777, -41.57239819004525),
			new Posicion(-1.188811188811189, -22.092760180995477),
			new Posicion(-16.167832167832167, -22.092760180995477),
			new Posicion(14.74125874125874, -21.61764705882353),
			new Posicion(-13.314685314685315, -7.839366515837104),
			new Posicion(10.937062937062937, -7.126696832579185),
			new Posicion(0.23776223776223776, -10.452488687782806) };

	Posicion alineacion13[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-10.223776223776223, -41.80995475113122),
			new Posicion(10.223776223776223, -41.80995475113122),
			new Posicion(24.48951048951049, -41.80995475113122),
			new Posicion(-23.3006993006993, -42.047511312217196),
			new Posicion(0.4755244755244755, -24.468325791855204),
			new Posicion(-14.265734265734267, -24.943438914027148),
			new Posicion(15.216783216783217, -24.705882352941178),
			new Posicion(-20.447552447552447, -15.441176470588236),
			new Posicion(19.020979020979023, -15.441176470588236),
			new Posicion(0.0, -10.690045248868778) };

	Posicion alineacion14[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-22.11188811188811, -42.522624434389144),
			new Posicion(0.23776223776223776, -42.997737556561084),
			new Posicion(21.874125874125873, -42.522624434389144),
			new Posicion(-28.76923076923077, -28.744343891402718),
			new Posicion(26.867132867132867, -28.50678733031674),
			new Posicion(0.23776223776223776, -18.529411764705884),
			new Posicion(13.076923076923078, -17.816742081447966),
			new Posicion(-16.405594405594407, -18.766968325791854),
			new Posicion(8.797202797202797, -7.601809954751132),
			new Posicion(-8.321678321678322, -8.314479638009049) };

	Posicion alineacion15[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-20.923076923076923, -42.047511312217196),
			new Posicion(0.0, -41.0972850678733),
			new Posicion(21.3986013986014, -41.57239819004525),
			new Posicion(-29.72027972027972, -28.50678733031674),
			new Posicion(27.34265734265734, -28.744343891402718),
			new Posicion(-0.7132867132867133, -24.705882352941178),
			new Posicion(11.888111888111888, -14.728506787330318),
			new Posicion(-10.937062937062937, -15.441176470588236),
			new Posicion(-2.6153846153846154, -13.540723981900454),
			new Posicion(1.4265734265734267, -10.690045248868778) };

	Posicion alineacion16[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-21.874125874125873, -42.047511312217196),
			new Posicion(0.4755244755244755, -41.80995475113122),
			new Posicion(21.636363636363637, -41.80995475113122),
			new Posicion(-10.937062937062937, -21.380090497737555),
			new Posicion(10.6993006993007, -21.61764705882353),
			new Posicion(-28.531468531468533, -21.380090497737555),
			new Posicion(24.48951048951049, -21.61764705882353),
			new Posicion(-17.11888111888112, -4.751131221719457),
			new Posicion(15.216783216783217, -4.98868778280543),
			new Posicion(-0.7132867132867133, -10.690045248868778) };

	Posicion alineacion17[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-10.937062937062937, -41.80995475113122),
			new Posicion(10.223776223776223, -41.334841628959275),
			new Posicion(25.678321678321677, -42.047511312217196),
			new Posicion(-23.538461538461537, -41.334841628959275),
			new Posicion(-10.937062937062937, -21.142533936651585),
			new Posicion(7.846153846153847, -21.380090497737555),
			new Posicion(28.293706293706293, -21.855203619909503),
			new Posicion(-27.81818181818182, -21.142533936651585),
			new Posicion(-1.4265734265734267, -0.7126696832579186),
			new Posicion(1.188811188811189, -0.9502262443438915) };

	Posicion alineacion18[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-8.321678321678322, -41.57239819004525),
			new Posicion(8.797202797202797, -42.047511312217196),
			new Posicion(24.727272727272727, -41.0972850678733),
			new Posicion(-24.727272727272727, -42.047511312217196),
			new Posicion(-9.034965034965035, -22.330316742081447),
			new Posicion(8.797202797202797, -21.61764705882353),
			new Posicion(26.867132867132867, -14.96606334841629),
			new Posicion(-28.293706293706293, -14.96606334841629),
			new Posicion(-1.6643356643356644, -1.1877828054298643),
			new Posicion(2.13986013986014, -1.4253393665158371) };

	Posicion alineacion19[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-8.083916083916083, -42.047511312217196),
			new Posicion(8.321678321678322, -41.334841628959275),
			new Posicion(24.013986013986013, -41.80995475113122),
			new Posicion(-23.776223776223777, -42.28506787330317),
			new Posicion(0.23776223776223776, -34.20814479638009),
			new Posicion(1.188811188811189, -18.054298642533936),
			new Posicion(9.748251748251748, -24.230769230769234),
			new Posicion(-10.223776223776223, -24.230769230769234),
			new Posicion(-1.902097902097902, -1.4253393665158371),
			new Posicion(2.377622377622378, -1.4253393665158371) };

	Posicion alineacion20[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-8.321678321678322, -41.334841628959275),
			new Posicion(9.748251748251748, -41.80995475113122),
			new Posicion(24.48951048951049, -41.334841628959275),
			new Posicion(-23.776223776223777, -41.57239819004525),
			new Posicion(-1.188811188811189, -22.092760180995477),
			new Posicion(-16.167832167832167, -22.092760180995477),
			new Posicion(14.74125874125874, -21.61764705882353),
			new Posicion(-13.314685314685315, -7.839366515837104),
			new Posicion(4.5174825174825175, -2.8506787330316743),
			new Posicion(-0.7132867132867133, -1.6628959276018098) };

	Posicion alineacion21[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-10.223776223776223, -41.80995475113122),
			new Posicion(10.223776223776223, -41.80995475113122),
			new Posicion(24.48951048951049, -41.80995475113122),
			new Posicion(-23.3006993006993, -42.047511312217196),
			new Posicion(0.4755244755244755, -24.468325791855204),
			new Posicion(-14.265734265734267, -24.943438914027148),
			new Posicion(15.216783216783217, -24.705882352941178),
			new Posicion(-20.447552447552447, -15.441176470588236),
			new Posicion(4.755244755244756, -3.800904977375566),
			new Posicion(-0.7132867132867133, -1.6628959276018098) };

	Posicion alineacion22[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-22.11188811188811, -42.522624434389144),
			new Posicion(0.23776223776223776, -42.997737556561084),
			new Posicion(21.874125874125873, -42.522624434389144),
			new Posicion(-28.76923076923077, -28.744343891402718),
			new Posicion(26.867132867132867, -28.50678733031674),
			new Posicion(0.23776223776223776, -18.529411764705884),
			new Posicion(13.076923076923078, -17.816742081447966),
			new Posicion(-16.405594405594407, -18.766968325791854),
			new Posicion(2.6153846153846154, -0.9502262443438915),
			new Posicion(-1.6643356643356644, -1.1877828054298643) };

	Posicion alineacion23[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-20.923076923076923, -42.047511312217196),
			new Posicion(0.0, -41.0972850678733),
			new Posicion(21.3986013986014, -41.57239819004525),
			new Posicion(-29.72027972027972, -28.50678733031674),
			new Posicion(27.34265734265734, -28.744343891402718),
			new Posicion(-0.7132867132867133, -24.705882352941178),
			new Posicion(11.888111888111888, -14.728506787330318),
			new Posicion(-10.937062937062937, -15.441176470588236),
			new Posicion(-1.902097902097902, -1.900452488687783),
			new Posicion(1.902097902097902, -1.6628959276018098) };

	Posicion alineacion24[] = new Posicion[] {
			new Posicion(0.2595419847328244, -50.41044776119403),
			new Posicion(-21.874125874125873, -42.047511312217196),
			new Posicion(0.4755244755244755, -41.80995475113122),
			new Posicion(21.636363636363637, -41.80995475113122),
			new Posicion(-10.937062937062937, -21.380090497737555),
			new Posicion(10.6993006993007, -21.61764705882353),
			new Posicion(-28.531468531468533, -21.380090497737555),
			new Posicion(24.48951048951049, -21.61764705882353),
			new Posicion(-17.11888111888112, -4.751131221719457),
			new Posicion(5.944055944055944, -3.5633484162895925),
			new Posicion(-1.188811188811189, -0.9502262443438915) };

	// ////////////////////codigo no generado
	private Posicion[][] ofensivas = new Posicion[][] { alineacion1,
			alineacion2, alineacion3, alineacion4, alineacion5, alineacion6,
			alineacion7, alineacion8 };
	private Posicion[][] defensivas = new Posicion[][] { alineacion9,
			alineacion10, alineacion11, alineacion12, alineacion13,
			alineacion14, alineacion15, alineacion16 };
	private Posicion[][] saques = new Posicion[][] { alineacion17,
			alineacion18, alineacion19, alineacion20, alineacion21,
			alineacion22, alineacion23, alineacion24 };

	/**
	 * Devuelve una alineacion ofensiva seg�n el par�metro. Las alineaciones
	 * disponibles son:
	 * 
	 * 0: 4-4-2 1: 4-2-2-2 2: 4-1-2-1-2 3: 4-3-3 4: 4-5-1 5: 5-3-2 6: 5-4-1 7:
	 * 3-4-3
	 * 
	 * */
	public Posicion[] getOffensivePositions(int index) {
		index = index < 0 ? 0 : index;
		index = index > 7 ? 7 : index;

		return this.ofensivas[index];
	}

	/**
	 * Devuelve una alineacion defensiva seg�n el par�metro. Las alineaciones
	 * disponibles son:
	 * 
	 * 0: 4-4-2 1: 4-2-2-2 2: 4-1-2-1-2 3: 4-3-3 4: 4-5-1 5: 5-3-2 6: 5-4-1 7:
	 * 3-4-3
	 * 
	 * */
	public Posicion[] getDefensivePositions(int index) {
		index = index < 0 ? 0 : index;
		index = index > 7 ? 7 : index;

		return this.defensivas[index];
	}

	/**
	 * Devuelve una alineacion para el saque seg�n el par�metro. Las
	 * alineaciones disponibles son:
	 * 
	 * 0: 4-4-2 1: 4-2-2-2 2: 4-1-2-1-2 3: 4-3-3 4: 4-5-1 5: 5-3-2 6: 5-4-1 7:
	 * 3-4-3
	 * 
	 * */
	public Posicion[] getKickOffPositions(int index) {
		index = index < 0 ? 0 : index;
		index = index > 7 ? 7 : index;

		return this.saques[index];
	}

}
